﻿/*************************************************************************************
 * 文 件 名:   HK_SingleFramesAnimator
 * 
 * 描    述:   UI 单次动画序列帧播放控制脚本
 * 
 * 版    本：  V1.0
 * 创 建 者：  京产肠饭
 * 创建时间：  2022/7/30
 * 链   接：  https://gitee.com/JingChanChangFan/hk_-unity-tools
*************************************************************************************/

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace HKTools
{
    [RequireComponent(typeof(Image))] // 自动添加Image组件
    public class HK_SingleFramesAnimator : MonoBehaviour
    {
        [Header("帧率："), SerializeField] float frameRate = 25.0f;
        [Header("初始时序列帧："), SerializeField] List<Sprite> frame_List = new List<Sprite>();

        Image image;

        // 当前的序列帧动画
        List<Sprite> curFrame_List = new List<Sprite>();

        bool isPlaying;
        int frameIndex = 0;
        float time;

        void Awake()
        {
            image = GetComponent<Image>();
            image.sprite = frame_List[0];
            frameIndex = 0;
            isPlaying = false;
        }

        void Update()
        {
            if (!isPlaying)
                return;

            // 没到切换帧的时间
            if ((time += Time.deltaTime) < 1f / frameRate)
                return;
            else
                time = 0f;

            frameIndex++;
            image.sprite = curFrame_List[frameIndex];

            if (frameIndex >= curFrame_List.Count - 1)
            {
                isPlaying = false;
            }
        }

        /// <summary>
        /// 播放序列帧
        /// </summary>
        public void PlayFramesAnim()
        {
            if (frame_List.Count > 0)
            {
                curFrame_List.Clear();

                frame_List.ForEach(item => curFrame_List.Add(item));
                image.sprite = curFrame_List[0];
                frameIndex = 0;
                isPlaying = true;
            }
            else
            {
                Debug.LogError("序列帧为空！");
            }
        }
    }
}